package self.zhangkang.chart.view

import android.graphics.Canvas
import android.graphics.Paint
import self.zhangkang.chart.data.KLineInfo

/**
 * @author : Android-张康
 * created on: 2023/8/10 10:00
 * description: 图标信息
 *
 * @param Chart 指标类型
 */
interface ChartIndexInfo<Chart : ChartIndex> {

    /**
     * 获取指标类型
     */
    fun getIndexInfo(): Chart

    /**
     * 获取占的比例
     */
    fun getProportion(): Int

    /**
     * 计算最大值前
     *
     * @param kLineInfo 第一个值
     */
    fun calculationMaxAndMinBefore(kLineInfo: KLineInfo)

    /**
     * 计算最大值
     *
     * @param kLineInfo 当前值
     */
    fun calculationMaxAndMin(kLineInfo: KLineInfo)

    /**
     * 计算最大值后
     */
    fun calculationMaxAndMinAfter()

    /**
     * 绘制背景
     *
     * @param canvas 画布
     * @param startX 开始X
     * @param startY 开始Y
     * @param stopX 结束X
     * @param stopY 结束Y
     * @param linePaint 线画笔
     * @param textPaint 文字画笔
     */
    fun drawBackground(
        canvas: Canvas,
        startX: Float,
        startY: Float,
        stopX: Float,
        stopY: Float,
        linePaint: Paint,
        textPaint: Paint
    )

    /**
     * 绘制当前值
     *
     * @param canvas 画布
     * @param startX 开始的 X
     * @param startY 开的的 Y
     * @param stopX 结束的 X
     * @param stopY 结束的 Y
     * @param linePaint 线的画笔
     * @param textPaint 文字的画笔
     * @param marginTop 距离顶部的距离
     * @param span
     * @param indexValueHorizontalSpace 指标值之间的横向距离
     * @param indexValueVerticalSpace 指标值之间的纵向距离
     * @param kLineInfo 当前的值
     * @param kLineIsLine K线是否为一条线
     */
    fun drawCurrentIndexInfo(
        canvas: Canvas,
        startX: Float,
        startY: Float,
        stopX: Float,
        stopY: Float,
        linePaint: Paint,
        textPaint: Paint,
        marginTop: Float,
        span: Int,
        indexValueHorizontalSpace: Float,
        indexValueVerticalSpace: Float,
        kLineInfo: KLineInfo,
        kLineIsLine: Boolean
    )

    /**
     * 绘制当前值内容之前
     *
     * @param canvas 画布
     * @param startX 开始的 X
     * @param startY 开的的 Y
     * @param stopX 结束的 X
     * @param stopY 结束的 Y
     * @param paint 画笔
     * @param candlestickWidth 蜡烛的宽度
     * @param candlestickWidthSpace 蜡烛之间的距离
     * @param kLineInfo 当前的值
     * @param kLineIsLine K线是否为一条线
     */
    fun beforeDrawItemContent(
        canvas: Canvas,
        startX: Float,
        startY: Float,
        stopX: Float,
        stopY: Float,
        paint: Paint,
        candlestickWidth: Float,
        candlestickWidthSpace: Float,
        kLineInfo: KLineInfo,
        kLineIsLine: Boolean
    )

    /**
     * 绘制当前值内容
     *
     * @param canvas 画布
     * @param startX 开始的 X
     * @param startY 开的的 Y
     * @param stopX 结束的 X
     * @param stopY 结束的 Y
     * @param textPaint 文字的画笔
     * @param linePaint 线的画笔
     * @param kLineInfo 当前的值
     * @param isFirst 是否为第一次
     * @param yangLineIsFill 阳线是否实心
     * @param totalTranslateX X轴总的位移
     * @param candlestickWidth 蜡烛的宽度
     * @param halfCandlestickWidth 蜡烛的一半宽度
     * @param kLineIsLine K线是否为一条线
     */
    fun drawItemContent(
        canvas: Canvas,
        startX: Float,
        startY: Float,
        stopX: Float,
        stopY: Float,
        textPaint: Paint,
        linePaint: Paint,
        kLineInfo: KLineInfo,
        isFirst: Boolean,
        yangLineIsFill: Boolean,
        totalTranslateX: Float,
        candlestickWidth: Float,
        halfCandlestickWidth: Float,
        kLineIsLine: Boolean
    )

    /**
     * 绘制完整个当前内容之后
     *
     * @param canvas 画布
     * @param paint 画笔
     */
    fun afterDrawItemContent(canvas: Canvas, paint: Paint)

    /**
     * 获取当前左边的值
     *
     * @param percentage 比例
     *
     * @return 返回当前左边坐标的值
     */
    fun getCurrentLeftValue(percentage: Float): String?

    /**
     * 获取当前右边的值
     *
     * @param percentage 比例
     *
     * @return 返回当前右边坐标的值
     */
    fun getCurrentRightValue(percentage: Float): String?

}